import dataDeal.fileUtils as fu
from datetime import datetime

# 需用ai解析存款行利率的群备注或聊天对象备注
name_include = ['bank1', 'bank2', 'bank3','bank4', 'bank5', 'bank6', 'bank7', 'bank8', 'bank9', 'bank10', 'bank11', 'bank12', 'bank13']

# 触发解析的关键词
keywords = ['HKD', 'USD', 'CNY', 'CNH', 'RMB', 'EUR',
            '港元', '港币', '美元', '美金', '人民币', '欧元',
            '1D', '7D', '14D', '1W', '2W', '1M', '2M', '3M', '4M', '5M', '6M', '9M', '12M', '1Y', '1-YEAR',
            '隔夜', '1星期', '2星期', '3星期', '一星期', '二星期', '三星期', '一周', '两周', '一个月', '二个月',
            '两个月', '三个月', '四个月', '五个月', '六个月', '九个月', '十二个月',
            '1周', '2周', '1个月', '2个月', '3个月', '4个月', '5个月', '6个月', '9个月', '12个月',
            'O/N', 'O.N', 'T/N', 'S/N',
            '[图片]', '[语音]', '[视频]', '[文件]']

prompt = ('你是一个存款利率解析器，需要根据输入的对话内容，将存款利率对应关系解析出来。\n'
          '一、任务\n'
          '输入交易员与存款行的群聊内容，分析内容，解析出存款利率并格式化输出。\n'
          '二、背景知识\n'
          '1、前置知识：\n'
          'HKD：港元、港币；USD：美元、美金；RMB：人民币；CNY：在岸人民币；CNH：离岸人民币；EUR：欧元；\n'
          '1D：隔夜、一天；7D：7天；14D：14天；1W：一周、一星期；2W：二周、二星期；1M：一个月；2M：二个月；\n'
          '3M：三个月；4M：四个月；5M：五个月；6M：六个月；9M：九个月；12M：十二个月、一年；1Y：一年；1-YEAR：一年\n'
          '2、询价情形：\n'
          '（1）交易员A每天会在群聊中向存款行B询价，询价内容包括币种与期限。\n'
          '例如，交易员A会问存款行B：\n'
          'USD：隔夜、1W、1M、2M、1Y\n'
          'CNY：隔夜、3M、6M\n'
          '注意：这里代表交易员A向存款行B询价，问USD在隔夜、1W、1M、2M、1Y和CNY在隔夜、3M、6M的对应的存款行利率是多少。\n'
          '（2）根据交易员A的提问，存款行B会对交易员A的每个（币种+期限）回复相应的存款行利率。也即每个（币种+期限）决定唯一的一个存款行利率。\n'
          '<1>比如存款行B会回复：\n'
          'USD:1% 2% 3% 4.0% 5.2%\n'
          'CNY：0.02   0.03   0.032\n'
          '注意：这里存款行B对交易员A的提问相应地回复了每个（币种+期限）决定的存款利率，比如1%对应USD在隔夜的存款利率，4.0%对应USD在2M期限的存款利率，0.032对应CNY在6M期限的存款利率。\n'
          '<2>有时候存款行B会给出一些区间回复：\n'
          'USD：1d1%  5-12天2% 22-36天3% 2个月4.0% 1年5.2%\n'
          'CNY：1天0.02   3个月0.03   150-190天0.032\n'
          '注意：这里存款行B对交易员A的提问相应地回复了每个（币种+期限）决定的存款利率，比如1%对应USD在隔夜的存款利率，而2%则代表对应存款期限为5-12天的存款利率，1W处在5-12天的范围内，因此USD在1W的存款利率为2%。同理对于CNY，150-190天的存款利率为3.2%，而6M期限落在150-190天范围内，因此CNY在6M期限的存款行利率为0.032或是3.2%。\n'
          '三、输入与输出\n'
          '（1）输入：交易员与存款行就存款利率询价的聊天记录\n'
          '注意：这里输入的聊天记录可能包括一些闲聊的无效信息\n'
          '（2）输出：以json格式输出（币种+期限）对应的存款利率，币种以英文缩写形式输出（USD、HKD、RMB），存款利率务必转换成小数形式输出（如0.05、0.25等，若出现%则相应去掉%并转换为等价的小数），若交易员询价问了隔夜则以1D形式输出隔夜期限。例如：\n'
          '{\n'
          '    "USD":{\n'
          '        "1M":0.03,\n'
          '        "1Y":0.052\n'
          '    },\n'
          '    "CNY":{\n'
          '        "1D":0.02,\n'
          '        "6M":0.032\n'
          '    }\n'
          '}\n'
          '注意：输出结果务必只保留json格式存款利率解析结果，请勿包含其他文字信息！\n')

prompt_resolve_rate = ('你是一个存款利率解析器，需要根据输入的对话内容，将存款利率对应关系解析出来。\n'
                       '一、任务\n'
                       '输入交易员与存款行的群聊内容，分析内容，解析出存款利率并格式化输出。\n'
                       '二、背景知识\n'
                       '1、前置知识：\n'
                       'HKD：港元、港币；USD：美元、美金；RMB：人民币；CNY：在岸人民币；CNH：离岸人民币；EUR：欧元；\n'
                       '1D：隔夜、一天；7D：7天；14D：14天；1W：一周、一星期；2W：二周、二星期；1M：一个月；2M：二个月；\n'
                       '3M：三个月；4M：四个月；5M：五个月；6M：六个月；9M：九个月；12M：十二个月、一年；1Y：一年；1-YEAR：一年\n'
                       '2、询价情形：\n'
                       '（1）交易员A每天会在群聊中向存款行B询价，询价内容包括币种与期限。\n'
                       '例如，交易员A会问存款行B：\n'
                       'USD：隔夜、1W、1M、2M、1Y\n'
                       'CNY：隔夜、3M、6M\n'
                       '注意：这里代表交易员A向存款行B询价，问USD在隔夜、1W、1M、2M、1Y和CNY在隔夜、3M、6M的对应的存款行利率是多少。\n'
                       '（2）根据交易员A的提问，存款行B会对交易员A回复相应的存款行利率。也即每个（币种+期限）决定唯一的一个存款行利率。\n'
                       '<1>比如存款行B会回复：\n'
                       'USD:1% 2% 3% 4.0% 5.2%\n'
                       'CNY：0.02   0.03   0.032\n'
                       '注意：这里存款行B对交易员A的提问相应地回复了每个（币种+期限）决定的存款利率，比如1%对应USD在隔夜的存款利率，4.0%对应USD在2M期限的存款利率，0.032对应CNY在6M期限的存款利率。\n'
                       '<2>有时候存款行B会给出一些区间回复：\n'
                       'USD：1d1%  5-12天2% 22-36天3% 2个月4.0% 1年5.2%\n'
                       'CNY：1天0.02   3个月0.03   150-190天0.032\n'
                       '注意：这里存款行B对交易员A的提问相应地回复了每个（币种+期限）决定的存款利率，比如1%对应USD在隔夜的存款利率，而2%则代表对应存款期限为5-12天的存款利率，1W处在5-12天的范围内，因此USD在1W的存款利率为2%。同理对于CNY，150-190天的存款利率为3.2%，而6M期限落在150-190天范围内，因此CNY在6M期限的存款行利率为0.032或是3.2%。\n'
                       '<3>有时候存款行B仅会针对某几个（币种+期限）对进行回复：\n'
                       'USD：1W2% 22-36天3% 1年5.2%\n'
                       'CNY：3个月0.03   150-190天0.032\n'
                       '注意，这里存款行B对交易员A的USD：1W、1M、1Y 和 CNY：3M、6M 这几个（币种+期限）对进行了回复。相应的USD在1W的存款利率为2%；USD在1M的存款利率为3%；USD在1Y的存款利率为5.2%；CNY在3M的存款利率为0.03；CNY在6M的存款利率为0.032。\n'
                       '<4>有时候存款行B回复的报价利率与交易员A的询价部分不匹配：\n'
                       'USD：6-12天 3.6% 151天3.8%\n'
                       'CNY：1M 0.03  六个月3.9%\n'
                       '注意：存款行B回复的报价有些和交易员A的询价对不上，此时，对的上的利率有USD在1W的存款利率(因为1W落在6-12天的区间)，对应利率为3.6%以及CNY在6M的存款利率，利率为3.9%，\n'
                       '因此输出USD在1W的存款利率以及CNY在6M的存款利率，其他对不上的则以0.000作为利率输出。\n'
                       '<5>有时候存款行B回复的报价利率与交易员A的询价全部不匹配：\n'
                       'USD：90-120天 3.6% 151天3.8%\n'
                       'CNY：1M 0.03\n'
                       '注意：存款行B回复的报价和交易员A的询价全部对不上，此时，以交易员A的询价期限为准，对应的利率全部输出为0.000。\n'
                       '三、输入与输出\n'
                       '（1）输入：存款行名、交易员与存款行就存款利率询价的聊天记录\n'
                       '注意：存款行名会在开头单独作为一行输出，存款行名后面部分即是询价的聊天记录；其次这里输入的聊天记录可能包括一些闲聊的无效信息。\n'
                       '（2）输出：以json格式输出存款行名以及（币种+期限）对应的存款利率；存款行名作为json的key值输出；币种以英文缩写形式输出（USD、HKD、RMB等）；\n'
                       '存款利率务必转换成小数形式输出（如0.05、0.25等，若出现%则相应去掉%并转换为等价的小数）；\n'
                       '若交易员询价问了隔夜则以"1D"的形式输出隔夜期限，其他期限则根据交易员的询价问题通过变换进行标准化输出，规则如下：\n'
                       '[1] 若期限为数字，则代表天，因此在后面补充一个D，如：1、2，相应期限则输出1D、2D\n'
                       '[2] 若期限为诸如1个月、一个月、1月、一月、二月、两个月、一年、12个月等非结构化期限情形时，则规范化相应输出诸如1M、2M、6M、1Y等\n'
                       '[3] 若期限为隔夜，相应期限则输出1D\n'
                       '[4] 若期限为周、W、w等，则相应输出对应的天数，比如1周、2W、5w，则相应规范化输出7D、14D、35D\n'
                       '{\n'
                       '    "cmbc":{\n'
                       '        "USD":{\n'
                       '            "1M":0.03,\n'
                       '            "1Y":0.052\n'
                       '        },\n'
                       '        "CNY":{\n'
                       '            "1D":0.02,\n'
                       '            "6M":0.032\n'
                       '        }\n'
                       '    }\n'
                       '}\n'
                       '注意：只输出json格式，其他不符合json格式的内容一律不许输出。其次，上述的"cmbc"即输入的存款行名，也就是输入什么存款行名，此处相应输出什么存款行名。')

prompt_resolve_bank = ('你是一个存款利率解析器，需要根据输入的对话内容，将存款行回价的存款利率对应关系解析出来。\n'
                       '一、任务\n'
                       '输入交易员与存款行的群聊内容，分析内容，解析出币种、期限和存款利率之间的关系并格式化输出。\n'
                       '二、背景知识\n'
                       '1、前置知识：\n'
                       'HKD：港元、港币；USD：美元、美金；RMB：人民币；CNY：在岸人民币；CNH：离岸人民币；EUR：欧元；\n'
                       '1D：隔夜、一天；7D：7天；14D：14天；1W：一周、一星期；2W：二周、二星期；1M：一个月；2M：二个月；\n'
                       '3M：三个月；4M：四个月；5M：五个月；6M：六个月；9M：九个月；12M：十二个月、一年；1Y：一年；1-YEAR：一年\n'
                       '2、询价情形：\n'
                       '（1）交易员A每天会在群聊中向存款行B询价，询价内容包括币种与期限。\n'
                       '例如，交易员A会问存款行B：\n'
                       'USD：隔夜、1W、1M、2M、1Y\n'
                       'CNY：隔夜、3M、6M\n'
                       '注意：这里代表交易员A向存款行B询价，问USD在隔夜、1W、1M、2M、1Y和CNY在隔夜、3M、6M的对应的存款行利率是多少。\n'
                       '（2）根据交易员A的提问，存款行B会对交易员A回复相应的存款行利率。也即每个（币种+期限）决定唯一的一个存款行利率。\n'
                       '<1>比如存款行B会回复：\n'
                       'USD:1% 2% 3% 4.0% 5.2%\n'
                       'CNY：0.02   0.03   0.032\n'
                       '注意：这里存款行B对交易员A的提问相应地回复了每个（币种+期限）决定的存款利率，比如1%对应USD在隔夜的存款利率，4.0%对应USD在2M期限的存款利率，0.032对应CNY在6M期限的存款利率。\n'
                       '<2>有时候存款行B会给出一些区间回复：\n'
                       'USD：1d1%  5-12天2% 22-36天3% 2个月4.0% 1年5.2%\n'
                       'CNY：1天0.02   3个月0.03   150-190天0.032\n'
                       '注意：这里存款行B对交易员A的提问相应地回复了每个（币种+期限）决定的存款利率，比如1%对应USD在隔夜的存款利率，而2%则代表对应存款期限为5-12天的存款利率，1W处在5-12天的范围内，因此USD在1W的存款利率为2%。同理对于CNY，150-190天的存款利率为3.2%，而6M期限落在150-190天范围内，因此CNY在6M期限的存款行利率为0.032或是3.2%。\n'
                       '<3>有时候存款行B仅会针对某几个（币种+期限）对进行回复：\n'
                       'USD：1W2% 22-36天3% 1年5.2%\n'
                       'CNY：3个月0.03   150-190天0.032\n'
                       '注意：这里存款行B对交易员A的USD：1W、1M、1Y 和 CNY：3M、6M 这几个（币种+期限）对进行了回复。相应的USD在1W的存款利率为2%；USD在1M的存款利率为3%；USD在1Y的存款利率为5.2%；CNY在3M的存款利率为0.03；CNY在6M的存款利率为0.032。\n'
                       '<4>有时候存款行B回复的报价存在（币种+期限）对对应不上交易员A的询价，比如回复：\n'
                       'USD：1W2% 22-36天3% 6M4.8%\n'
                       'CNY：5个月0.032   1年0.036\n'
                       'EUR：1M 0.065\n'
                       '注意：这对应上的有USD：1W 2%，USD 22-36天3%，存款行B其余的回复都是对应不上交易员A的询价的。\n'
                       '三、输入与输出\n'
                       '（1）输入：当日日期、交易员与存款行就存款利率询价的聊天记录\n'
                       '注意：当日日期会在开头单独作为一行输出，当日日期后面部分即是询价的聊天记录；这里输入的聊天记录可能包括一些闲聊的无效信息\n'
                       '（2）输出：以json格式输出当日日期以及（币种+期限）对应的存款利率，当日日期作为json的key值输出，币种以英文缩写形式输出（USD、HKD、RMB），存款利率务必转换成小数形式输出（如0.05、0.25等，若出现%则相应去掉%并转换为等价的小数）。期限输出规则如下：\n'
                       '[0] 输出的利率期限以存款行输出的期限为准，若存款行回价带有期限，则取存款行的期限；若存款行未输出期限，则取交易员的询价期限\n'
                       '    如：若交易员A问 USD：1 7 14 对应存款利率，存款行回USD：隔夜0.026 6-8D 0.037 13-15D 0.038，那么输出的期限则取1D、6D、7D、8D、13D、14D、15D，而不是1D、7D、14D\n'
                       '[1] 若期限为数字，则代表天，因此在后面补充一个D，如：1、2，相应期限则输出1D、2D\n'
                       '[2] 若期限为诸如1个月、一个月、1月、一月、二月、两个月、一年、12个月等非结构化期限情形时，则规范化相应输出诸如1M、2M、6M、1Y等\n'
                       '[3] 若期限为隔夜，相应期限则输出1D\n'
                       '[4] 若期限为周、W、w等，则相应输出对应的天数，比如1周、2W、5w，则相应规范化输出7D、14D、35D\n'
                       '[5] 若期限为区间诸如5-12天、21-36天，相应5-12天期限输出5D、6D、7D、8D、9D、...、12D；相应21-36天期限输出21D、22D、23D、24D、25D、26D、27D、28D、...、35D、36D\n'
                       '\n'
                       '整体输出样例如下：\n'
                       '<1>情形1：存款行回价不包含期限信息\n'
                       '如果存款行B在回复利率报价的时候不包含期限信息，如：\n'
                       'USD：1% 2% 3% 4.0% 5.2%\n'
                       'CNY：0.02   0.03   0.032\n'
                       '那么，期限信息则取交易员A询价时相对应的询价期限。\n'
                       '比如交易员A询价\n'
                       'USD：隔夜、1W、1M、2M、1Y\n'
                       'CNY：隔夜、3M、6M\n'
                       '存款行B回\n'
                       'USD：1% 2% 3% 4.0% 5.2%\n'
                       'CNY：0.02   0.03   0.032\n'
                       '那么USD：1%对应的期限为隔夜、CNY：0.03对应的期限为3M，以此类推。\n'
                       '再经过上面的输出规则，期限进一步相应转换为1D、3M等。最终输出结果为\n'
                       '{\n'
                       '    "2024-11-30":{\n'
                       '        "USD":{\n'
                       '            "1D":0.01,\n'
                       '            "7D":0.02,\n'
                       '            "1M":0.03,\n'
                       '            "2M":0.04,\n'
                       '            "1Y":0.052\n'
                       '        },\n'
                       '        "CNY":{\n'
                       '            "1D":0.02,\n'
                       '            "3M":0.02,\n'
                       '            "6M":0.032\n'
                       '        }\n'
                       '    }\n'
                       '}\n'
                       '<2>情形2：存款行回价包含期限信息\n'
                       '如果存款行B在回复利率报价的时候包含期限信息，如：\n'
                       'USD：1d1%  5-7天2% 21-23天3% 2个月4.0% 1年5.2%\n'
                       'HKD：隔夜0.032 6M0.048\n'
                       '那么，无需考虑交易员A的询价内容，仅关注存款行B回复的利率报价信息。因此此样例期限信息取存款行B回复报价的对应询价期限。如上述期限取1d、5-7天、6M等。\n'
                       '再经过上面的输出规则，期限进一步进行相应的转换。最终输出结果为\n'
                       '{\n'
                       '    "2024-11-30":{\n'
                       '        "USD":{\n'
                       '            "1D":0.01,\n'
                       '            "5D":0.02,\n'
                       '            "6D":0.02,\n'
                       '            "7D":0.02,\n'
                       '            "21D":0.03,\n'
                       '            "22D":0.03,\n'
                       '            "23D":0.03,\n'
                       '            "2M":0.04,\n'
                       '            "1Y":0.052\n'
                       '        },\n'
                       '        "HKD":{\n'
                       '            "1D":0.032,\n'
                       '            "6M":0.048\n'
                       '        }\n'
                       '    }\n'
                       '}\n'
                       '注意：只输出json格式，其他不符合json格式的内容一律不许输出。其次，上述的样例中的"2024-11-30"即输入的当日日期，也就是输入什么当日日期，此处相应输出什么当日日期。')

# # 数据存放文件路径
# INFO_FILE_PATH = './app/data/info.json'  # 个人信息文件
# DB_DIR = './app/Database/Msg'
# OUTPUT_DIR = './data/'  # 输出文件夹
# os.makedirs('./app/data', exist_ok=True)
# os.makedirs(DB_DIR, exist_ok=True)
# os.makedirs(OUTPUT_DIR, exist_ok=True)
# # 全局参数
# SEND_LOG_FLAG = True  # 是否发送错误日志
# SERVER_API_URL = 'http://api.lc044.love'  # api接口

# 初始化会话滚动次数
round_time = 1
# 初始化会话滚动距离
round_distance = 5

nowtime = datetime.now()
nowtime_str = nowtime.strftime("%Y-%m-%d")

# 初始化会话状态文件路径
init_sessions_status_dict_file_path = 'init_sessions.json'
# 会话状态字典，确保当天初始化过
init_sessions_status_dict = fu.parse_json_to_dict(init_sessions_status_dict_file_path)

# 状态字典文件路径，持久化状态字典，保证宕机后仍能继续工作
status_dict_file_path = 'status_dict ' + nowtime_str + '.json'
# 状态字典，用于追踪利率在excel表里的具体位置，便于更新
status_dict = fu.parse_json_to_dict(status_dict_file_path)

# 利率解析结果excel文件路径
resolve_result_path = 'resultToday/利率解析结果 ' + nowtime_str + '.xlsx'

# 保存每一个存款行报价利率历史
inquiry_summary_dict = dict()
bank_ratio_path_dict = dict()

# 保存每个存款行每天的聊天记录片段
chat_history_path_dict = dict()
chat_history_dict = dict()
for name in name_include:
    # 获得相应的询价汇总
    summary_dict_path = 'banksRatioHistory/' + name + '.json'
    bank_ratio_path_dict[name] = summary_dict_path
    bank_dict = fu.parse_json_to_dict(summary_dict_path)
    inquiry_summary_dict[name] = bank_dict
    # 获得相应的聊天记录
    chat_history_path = 'banksRatioHistory/' + name + '_chat_history(' + nowtime_str + ').json'
    chat_history_path_dict[name] = chat_history_path
    bank_chat_history_dict = fu.parse_json_to_dict(chat_history_path)
    chat_history_dict[name] = bank_chat_history_dict

if __name__ == '__main__':
    time = datetime.now()
    time_str = nowtime.strftime("%H:%M:%S")
    print(prompt_resolve_bank)
